当前位置:  开发笔记 > 编程语言 > 正文

避免`logger = logging.getLogger(__ name __)`

如何解决《避免`logger=logging.getLogger(__name__)`》经验,为你挑选了1个好方法。

我们设置日志记录就像django docs告诉我们的那样:

https://docs.djangoproject.com/en/2.1/topics/logging/#using-logging

# import the logging library
import logging

# Get an instance of a logger
logger = logging.getLogger(__name__)

def my_view(request, arg1, arg):
    ...
    if bad_mojo:
        # Log an error message
        logger.error('Something went wrong!')

我想在每个想要记录的Python文件中避免这一行:

logger = logging.getLogger(__name__)

我想要简单:

logging.error('Something went wrong!')

但我们希望保留一个功能:我们希望在日志记录输出中看到Python文件名.

到目前为止,我们使用以下格式:

'%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s'

示例输出:

2016-01-11 12:12:31 myapp.foo +68: ERROR Something went wrong

怎么避免logger = logging.getLogger(__name__)



1> mfitzp..:

您可以使用以下logging.basicConfig方式定义可用的默认界面logging:

import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s',
                    )

现在,只要在应用程序中的任何位置执行以下操作,就会使用此定义:

import logging
logging.error(...)

虽然__name__无法使用,等效(和其他选项)都可以通过默认的LogRecord属性,可以用于错误字符串格式化-包括module,filenamepathname.以下是这个实际操作的双脚本演示:

scripta.py

import logging
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(module)s %(name)s.%(funcName)s +%(lineno)s: %(levelname)-8s [%(process)d] %(message)s',
                    )

from scriptb import my_view

my_view()

scriptb.py

import logging

def my_view():
    # Log an error message
    logging.error('Something went wrong!')

scripta.py使用添加的module参数定义日志记录定义.在scriptb.py我们只是需要进口logging来获得访问该定义的默认.运行时scripta.py会生成以下输出:

2016-01-14 13:22:24,640 scriptb root.my_view +9: ERROR    [14144] Something went wrong!

其中显示了scriptb发生错误记录的module().

根据这个答案,您可以继续使用任何来自Django的每个模块的日志记录配置,关闭Django处理并设置根处理程序,如下所示:

# settings.py - django config
LOGGING_CONFIG = None # disables Django handling of logging
LOGGING = {...}  # your standard Django logging configuration

import logging.config
logging.config.dictConfig(LOGGING)


`.getLogger(__ name __)`样式允许在Django框架中过滤和处理不同的(例如每个模块,每个应用程序)记录器 - 使用`.basicConfig(...)`丢失.例如,请参阅您链接的页面上的[配置日志记录](https://docs.djangoproject.com/en/1.9/topics/logging/#configuring-logging)部分.您必须确定这种配置丢失是否对您的用例很重要.
哇,如果这很容易,我会问自己为什么django开发人员用`logger = logging.getLogger(__ name __)`来推广更复杂的方式.Django docs:https://docs.djangoproject.com/en/1.9/topics/logging/#using-logging
请注意,如果你从不调用`logging.getLogger(__ name __)`那么日志条目的`%(name)s`部分将永远是`root`.
推荐阅读
手机用户2402852307
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有